<?php
// 导入配置文件和DB 类
require './configs/config.php';
// require './models/DB.class.php';

// // 导入所有控制器
// require './controllers/IndexController.php';
// require './controllers/UserController.php';
// require './controllers/GoodsController.php';

// 自动加载类的操作__autoload
function mvc_autoload($classname)
{
    // echo $classname;
    if (file_exists("./models/{$classname}.class.php")) {
        require "./models/{$classname}.class.php";
    } else if (file_exists("./controllers/{$classname}.php")) {
        require "./controllers/{$classname}.php";
    } else {
        // 添加404 header
        header("HTTP/1.0 404 not found");
        echo "<h1>404 NOT FOUND  控制器不存在</h1>";
        exit;
    }
    
}

// 导入模板引擎
require './libs/Smarty.class.php';
// 注册给定的函数 作为自动加载类的实现 __autoload
spl_autoload_register('mvc_autoload');
// $smarty = new Smarty();
// var_dump($smarty);

// 处理url
// var_dump($_SERVER['PATH_INFO']);
// var_dump($_SERVER);
if(!empty($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO']!='/'){
    // 取出除了伪静态后缀之外的内容
    $pathinfo = trim(str_replace('.html','',$_SERVER['PATH_INFO']),'/');
    // 切割为数组
    $mathes = explode('/', $pathinfo);
    // 控制器
    $_GET['c']=$mathes[0];
    // 方法
    $_GET['a']=empty($mathes[1])?'':$mathes[1];

    // 如果数组成员的个数大于2 就处理其它的参数
    if (count($mathes)>2){
        for ($i=2; $i < count($mathes); $i += 2) { 
            // 如果是单数的参数，跳过不处理
            if (empty($mathes[$i+1])) {
                continue;
            }
            $_GET[$mathes[$i]]=$mathes[$i+1];
        }
    }
}

// PATH的生成
// 获取当前入口文件所在的目录的绝对路径
$path = dirname(__FILE__);
// var_dump($path);
// 把绝对路径定义成路径常量
define('PATH', str_replace('\\','/',$path).'/');

// url的拼接
// 拼接协议域名
$url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_NAME'];
// 取出当前脚本所在文档的根目录
$dir = $_SERVER['DOCUMENT_ROOT'];
// 进行拼接 把path中项目目录之前的部分 替换成域名的形式
$url = str_replace($dir,$url,PATH);
// var_dump($url);
define('URL', $url);

// 获取用户传递的参数
// 获取控制器
$c = (!empty($_GET['c']))?$_GET['c']:'Index';
// 获取方法名
$a = (!empty($_GET['a']))?$_GET['a']:'index';

// 拼接一个完整的类名
$classname = $c.'Controller';
// 实例化控制器类
$controller = new $classname();
// 调用控制器中的方法
$controller->$a();
?>